#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Created by master on 2017/3/11

'''
进程池内部维护一个进程序列，当使用时，则去进程池中获取一个进程，
如果进程池序列中没有可供使用的进进程，那么程序就会等待，直到进程池中有可用进程为止。

进程池中有两个方法：

apply
apply_async
'''
from multiprocessing import Process, Pool
import time

from multiprocessing import freeze_support


def Foo(i):
    time.sleep(2)
    return i + 100


def Bar(arg):
    print('-->exec done:', arg)


if __name__ == '__main__':
    freeze_support()  # 在windows下添加这个 否则创建不了新进程
    pool = Pool(5)

    for i in range(10):
        pool.apply_async(func=Foo, args=(i,), callback=Bar)
        # pool.apply(func=Foo, args=(i,)) # 同步的时候不能callback

    print('end')
    pool.close()
    pool.join()  # 进程池中进程执行完毕后再关闭，如果注释，那么程序直接关闭。
